package bit_operation;

/**
 * 判定字符是否唯一
 */
public class Demo20250503 {
    public boolean isUnique(String astr) {
        //使用位图思想
        // 使用鸽巢原理进行优化
        if (astr.length() > 26) return false;
        int bitMap = 0;
        for (int i = 0; i < astr.length(); i++) {
            int x = astr.charAt(i) - 'a';
            // 先判断字符是否在位图中
            if (((bitMap >> x) & 1) == 1) {
                return false;
            }
            // 把当前字符加入到位图中
            bitMap |= 1 << x;
        }
        return true;


        // // 使用 bool 数组
        // if (astr.length() >26) {
        //     return false;
        // }
        // boolean[] b = new boolean[26];
        // for(int i = 0; i < astr.length(); i++) {
        //     char ch = astr.charAt(i);
        //     int index = ch - 'a';
        //     if(b[index] == true) {
        //         return false;
        //     }
        //     b[index] = true;
        // }
        // return true;
    }
}
